package com.xxxtea.redis;

import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * Redis键管理枚举
 * 
 * 用于统一管理Redis键的命名规范，包括：
 * - 键名定义
 * - 键描述标签
 * - 动态键构建方法
 * 
 * 使用枚举确保键名的一致性和可维护性
 * 
 * @author badman
 * @since 1.0.0
 */
@Getter
@AllArgsConstructor
public enum RedisKey {
	;

	/**
	 * Redis键名
	 */
	private final String key;
	
	/**
	 * 键描述标签
	 */
	private final String label;

	/**
	 * 构建完整的Redis键
	 * 
	 * 根据应用名称、键名和参数构建标准的Redis键
	 * 格式：应用名:键名:参数1:参数2...
	 * 
	 * @param args 键参数，可变参数
	 * @return 完整的Redis键字符串
	 */
	public String build(Object... args) {
		// 获取应用名称
		String app = SpringUtil.getProperty("spring.application.name");
		// 拼接完整的键名：应用名:键名:参数1:参数2...
		return StrUtil.join(":", app, key, args);
	}
}
